/**
 * JS con las acciones comunes para todas las operaciones con Google Fusion Tables
 */
define(["dojo/json","fusion/config/configConstants","dojo/_base/array", "fusion/form/formTools", "tools/GlobalTools", "dojo/domReady!"], 
		function(JSON, constants, array, formTools, GlobalTools){
    var conf = "{}";
    var SUFIJO_COMBO = "_DESC";
    /**
     * Función que recupera la configuración desde fichero json
     */
    function initConfigFusionTable(fichConfig){

  	  console.log("fusionTools::initConfigFusionTable init");
  	  require(["dojo/json","dojo/text!fusion/config/fusionTableConfig_"+fichConfig+".json"], function(JSON, fusionConfig){
		   
		   conf = JSON.parse(fusionConfig);
		   console.log("fusionTools::initConfigFusionTable DescripcionTabla: "+conf.DescripcionTabla);

	  });
  	
     return conf;
    }
    
    
    /**
     * Función que devuelve el json para configurar las cabeceras de un Dgrid.
     */
    function fusionQueryResponseColumnsToJson(output, conf){
    	
    	console.log("fusionTools::fusionQueryResponseColumnsToJson");
    	var data = JSON.parse(output);
    	
    	var filas = 0;
    	if(data.rows!= undefined && data.rows.length>0){
    		filas = data.rows.length;
    	}
    	console.log("fusionTools::fusionQueryResponseColumnsToJson numColumns: "+data.columns.length);
    	console.log("fusionTools::fusionQueryResponseColumnsToJson numRows: "+filas);
    	console.log("fusionTools::fusionQueryResponseColumnsToJson numCampos: "+conf.Campos.length);
    	
		var columnsDefString = '{ '; //variable que tendrá en formato string el json a montar para configurar el dgrid
		
		array.forEach(eval("conf."+constants.TABLA_CAMPOS), function(campo,i){
			//console.log("fusionTools::fusionQueryResponseColumnsToJson campo: ", campo);
			//console.log("fusionTools::fusionQueryResponseColumnsToJson ocultagrid: ",eval ('campo.'+constants.CAMPOS_OCULTO_GRID));
			//console.log("fusionTools::fusionQueryResponseColumnsToJson esoculto: ", eval('campo.'+constants.CAMPOS_ES_OCULTO));
			//console.log("fusionTools::fusionQueryResponseColumnsToJson iff-->: ", (eval('campo.'+constants.CAMPOS_ES_OCULTO) == 'false') && (eval('campo.'+constants.CAMPOS_OCULTO_GRID) == 'false'));
			
			 if((eval('campo.'+constants.CAMPOS_ES_OCULTO) == 'false') && (eval('campo.'+constants.CAMPOS_OCULTO_GRID) == 'false')){
				//Tratamiento especial para todos los elementos que no sean el primer elemento.
    			 if(i > 0){
    				 columnsDefString+= ',';
    			 }
    			 
    			 codCampo = eval('campo.'+constants.CAMPOS_CODIGO);

					var esCampoCombo = formTools.isCampoCombo(conf, codCampo);
					
					//Si es de tipo COMBO el nombre de campo que muestro es con el sufijo _DESC que indica que  se cargará la 
					//descripción.
					if(esCampoCombo){
						
						 columnsDefString+= '"'+eval('campo.'+constants.CAMPOS_CODIGO)+SUFIJO_COMBO+'" : "'+eval('campo.'+constants.CAMPOS_VISUALIZA)+'"';
				          
					}else{
					
						 columnsDefString+= '"'+eval('campo.'+constants.CAMPOS_CODIGO)+'" : "'+eval('campo.'+constants.CAMPOS_VISUALIZA)+'"';
					}

			 }
			 
			 //Tratamiento especial para el último elemento.
			 if(i == eval("conf."+constants.TABLA_CAMPOS+".length")-1){
				 columnsDefString += '}';
			 }
    			
    	});
	 
    	console.log("fusionTools::fusionQueryResponseColumnsToJson columnas: "+columnsDefString);
    	return columnsDefString;
    	
    }
    /**
     * Función que convierte a json la respuesta de fusion tables para la tabla cuya configuración
     * también se pasa como parámetro
     */
    function fusionQueryResponseToJson(output, conf){
    	
    	
    	console.log("fusionTools::fusionQueryResponseToJson");
    	var data = JSON.parse(output);
    	
    	var filas = 0;
    	if(data.rows!= undefined && data.rows.length>0){
    		filas = data.rows.length;
    	}
    	console.log("fusionTools::fusionQueryResponseToJson numColumns: "+data.columns.length);
    	console.log("fusionTools::fusionQueryResponseToJson numRows: "+filas);
    	console.log("fusionTools::fusionQueryResponseToJson numCampos: "+conf.Campos.length);
    	

		 var datosString = '[ ';
		 
		  	array.forEach(data.rows, function(fila, j){
		  		datosString+= '{';
				  
				  array.forEach(fila, function(campo, h){
					if((eval('campo.'+constants.CAMPOS_ES_OCULTO)+'== false') && (eval('campo.'+constants.CAMPOS_OCULTO_GRID)+'== false')){ //Si el campo no es oculto

						
						codCampo = eval("conf."+constants.TABLA_CAMPOS+"["+h+"]."+constants.CAMPOS_CODIGO);
						
						var esCampoCombo = formTools.isCampoCombo(conf, codCampo);

						var nombreDato = "";
						if(esCampoCombo){
							//console.log("fusionTools::fusionQueryResponseToJson es COMBO");
							var nombreTabla = eval("conf."+constants.TABLA_CAMPOS+"["+h+"]."+constants.CAMPOS_COMBO_TABLA);
							var resultStore; //Parece que no se utiliza. Pero sí que lo hace en el eval unas líneas más abajo.
						
							require(["tools/GlobalTools"], function(GlobalTools){
								
								resultStore = GlobalTools.getStoreValueName(nombreTabla, campo);
								if(resultStore != undefined){ //Si el combo no es obligatorio puede venir vacío.
								
									console.log("fusionTools::fusionQueryResponseToJson resultStore",resultStore);
									var nombreCampo =  eval("conf."+constants.TABLA_CAMPOS+"["+h+"]."+constants.CAMPOS_COMBO_CAMPO);
									console.log("fusionTools::fusionQueryResponseToJson nombreCampo",nombreCampo);
									nombreDato = eval("resultStore."+nombreCampo);
									
								}else{
									nomreDato = "";
								}
								console.log("fusionTools::fusionQueryResponseToJson es COMBO nombreDato",nombreDato);
							  });
							
							
							datosString+= '"'+codCampo+SUFIJO_COMBO+'" : "'+nombreDato+'",';
							datosString+= '"'+codCampo+'" : "'+campo+'"';
					          
						}else{
						
							datosString+='"'+codCampo+'" : "'+campo+'"';
						}
					}
					
					datosString+= h == fila.length-1?"":",";

				  });
				datosString+= '}';
				datosString+= j == data.rows.length-1?"":",";
			    
			 });
		  	 datosString += ' ]';
		  
		 	console.log("fusionTools::fusionQueryResponseToJson convert json: "+datosString);
		  
		 	return datosString;
		  
    }
    
    /**
     * Funci�n que recupera la configuraci�n desde fichero json para rellenar el men� de gesti�n
     */
    function getConfigMenuGestion(){
    	
      var confGestion = {};
  	  console.log("fusionTools::getConfigMenuGestion init");
  	  require(["dojo/json","dojo/text!fusion/config/fusionTables.json"], function(JSON, fusionTables){
  		
  		 console.log("fusionTools::getConfigMenuGestion load: "+fusionTables);
  		  
  		confGestion = JSON.parse(fusionTables);
		   console.log("fusionTools::getConfigMenuGestion load: "+confGestion.Descripcion);

	  });
  	
     return confGestion;
    }
    

	/**
	 * M�todos que se exponen en esta definici�n
	 */
	return{
		initConfigFusionTable : initConfigFusionTable,
		fusionQueryResponseToJson: fusionQueryResponseToJson,
		fusionQueryResponseColumnsToJson: fusionQueryResponseColumnsToJson,
		getConfigMenuGestion : getConfigMenuGestion
	};

});

